{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "ed9a5b1f-75ae-425e-9bc3-35dfeec1b191",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/tmp/ipykernel_22479/4052334138.py:15: LangChainDeprecationWarning: The class `OllamaEmbeddings` was deprecated in LangChain 0.3.1 and will be removed in 1.0.0. An updated version of the class exists in the :class:`~langchain-ollama package and should be used instead. To use it run `pip install -U :class:`~langchain-ollama` and import as `from :class:`~langchain_ollama import OllamaEmbeddings``.\n",
      "  embeddings = OllamaEmbeddings(model=model)\n",
      "/tmp/ipykernel_22479/4052334138.py:20: LangChainDeprecationWarning: The class `Ollama` was deprecated in LangChain 0.3.1 and will be removed in 1.0.0. An updated version of the class exists in the :class:`~langchain-ollama package and should be used instead. To use it run `pip install -U :class:`~langchain-ollama` and import as `from :class:`~langchain_ollama import OllamaLLM``.\n",
      "  llm = Ollama(model=model)\n"
     ]
    }
   ],
   "source": [
    "from langchain.document_loaders import PDFPlumberLoader\n",
    "from langchain.vectorstores import Chroma\n",
    "from langchain_community.embeddings import OllamaEmbeddings\n",
    "from langchain.chains import RetrievalQA\n",
    "from langchain.llms import Ollama\n",
    "\n",
    "model = \"deepseek-r1:32b\"\n",
    "\n",
    "file_path = '/home/geobeans/Documents/pdf/信息地理学_信息革命重塑地理学_李新.pdf'\n",
    "#file_path = '/home/geobeans/Documents/pdf/基于大模型的具身智能任务规.pdf'\n",
    "\n",
    "loader = PDFPlumberLoader(file_path)\n",
    "documents = loader.load_and_split()\n",
    "\n",
    "embeddings = OllamaEmbeddings(model=model)\n",
    "\n",
    "# 这样代码，将embeddings写入到chroma向量数据库中\n",
    "vectorstore = Chroma.from_documents(documents, embeddings)\n",
    "\n",
    "llm = Ollama(model=model)\n",
    "qa_chain = RetrievalQA.from_chain_type(llm, retriever=vectorstore.as_retriever())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "2c191a9c-3b70-4f38-aadc-26cdfa9bcde5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<think>\n",
      "嗯，我现在要仔细阅读这篇关于信息地理学的文章，并回答相关的问题。首先，文章提到信息地理学是地理遥感科学、地理信息科学和地理数据科学三个领域的结合，旨在利用信息技术来推动地理学的发展。\n",
      "\n",
      "我需要理解这三个学科之间的关系以及它们如何共同构成了信息地理学的基础。地理遥感科学主要涉及使用卫星和其他传感器获取地球表面的数据，而地理信息科学（GIScience）则更侧重于处理、存储和分析这些地理数据，可能包括地图绘制、空间分析等技术。地理数据科学则是利用大数据和机器学习等方法来从大量地理数据中提取有用的信息。\n",
      "\n",
      "接下来，文章指出信息地理学不仅仅是这三个学科的简单结合，而是通过跨学科的方法论研究，将地理问题转化为可以被计算机处理的形式，并利用先进的计算手段来进行模拟和预测。这表明信息地理学注重的是解决实际地理问题中的复杂性，而不是仅仅停留在数据处理或技术层面。\n",
      "\n",
      "然后，文章提到了信息地理学对社会的影响，特别是在当前数字化转型的大背景下，它能够为城市规划、环境保护等领域提供科学依据和决策支持。这让我想到，例如在智能城市中使用实时地理数据分析交通流量，或者利用环境数据来预测气候变化的影响，这些都是信息地理学可能的应用场景。\n",
      "\n",
      "不过，我也有些疑问。比如，信息地理学与传统的地理信息科学（GIScience）有什么不同？文章提到，地理信息科学更偏向于地图学和GIS系统，而信息地理学则扩展到了遥感技术和地球系统模拟，这可能意味着它涵盖了更多的数据来源和技术手段，不仅仅局限于空间数据分析。\n",
      "\n",
      "另外，文章中还提到了地信息学的概念，但指出它是整个地学和信息科学的交叉，可能涵盖更广泛的领域，而不仅仅是地理学。因此，信息地理学似乎更加专注于地理学本身，并结合最新的信息技术来解决地理问题。\n",
      "\n",
      "在阅读过程中，我意识到自己对这些术语的理解还不够深入，特别是关于不同学科之间的界限和重叠部分。例如，地理数据科学如何与GIScience区分？是不是地理数据科学更侧重于数据分析的方法，而GIScience则侧重于空间数据的管理和展示？\n",
      "\n",
      "此外，文章提到信息地理学在方法论上的创新，这让我思考它具体有哪些新的研究方法或工具。比如，是否引入了深度学习、人工智能等技术来处理和分析地理数据？或者是否有新的建模方法来模拟复杂的地理现象？\n",
      "\n",
      "最后，我想到信息地理学的应用前景非常广阔，但同时也面临一些挑战。例如，如何处理海量的地理数据？如何确保数据的质量和准确性？以及在实际应用中，如何平衡技术的先进性和操作的可行性。\n",
      "\n",
      "综上所述，信息地理学是一个跨学科的新领域，它结合了遥感、GIScience和数据科学的技术与方法，旨在通过信息技术来解决复杂的地理问题，并为社会发展提供支持。接下来，我需要进一步查阅相关文献，了解更多信息地理学的具体应用案例和技术细节，以加深对这个领域的理解。\n",
      "</think>\n",
      "\n",
      "信息地理学是一个跨学科的新领域，结合了遥感、地理信息科学（GIScience）和地理数据科学的技术与方法，旨在通过信息技术解决复杂的地理问题，并支持社会发展的多个方面。以下是对此领域的一些关键点总结：\n",
      "\n",
      "1. **学科融合**：\n",
      "   - 信息地理学整合了地理遥感科学、GIScience和地理数据科学三个领域。\n",
      "   - 地理遥感科学利用卫星和其他传感器获取地球表面数据，而GIScience侧重于处理和分析这些空间数据，包括地图绘制和空间分析技术。\n",
      "\n",
      "2. **方法论创新**：\n",
      "   - 信息地理学不仅关注数据处理，还注重将地理问题转化为可计算的形式，利用计算机模拟和预测。\n",
      "   - 可能引入深度学习、人工智能等新技术来提升数据分析能力，并采用新的建模方法模拟复杂地理现象。\n",
      "\n",
      "3. **应用领域**：\n",
      "   - 在智能城市中实时分析交通流量，或在环境保护中预测气候变化影响，是信息地理学的典型应用场景。\n",
      "   - 为城市规划和环境管理提供科学依据和决策支持。\n",
      "\n",
      "4. **与相关学科的区别**：\n",
      "   - 与GIScience相比，信息地理学扩展到遥感技术和地球系统模拟，涵盖更多数据来源和技术手段。\n",
      "   - 地信息学是更广泛的交叉科学，而信息地理学专注于地理问题，并结合最新信息技术解决这些挑战。\n",
      "\n",
      "5. **面临的挑战**：\n",
      "   - 处理海量地理数据的质量、准确性和可用性问题。\n",
      "   - 在实际应用中平衡技术先进性和操作可行性，确保解决方案的有效实施。\n",
      "\n",
      "通过深入研究和了解更多信息地理学的具体案例和技术细节，可以进一步理解其潜力和实际影响。\n"
     ]
    }
   ],
   "source": [
    "query = \"你的问题是什么？\"\n",
    "response = qa_chain.invoke(query)\n",
    "print(response[\"result\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "b952c0d9-149b-4cc6-891e-385afb6e51b8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<think>\n",
      "嗯，我看到用户的问题是关于这篇文章中“本体论”指什么。首先，我需要理解文章的背景和内容。看起来这是一篇讨论信息革命对地理学影响的文章，特别是提出了一种新的学科概念——信息地理学。\n",
      "\n",
      "本体论在哲学中通常指的是研究实在的根本性质，也就是存在的本质。在科学领域，尤其是地理学这样的应用学科中，本体论可能涉及该学科的研究对象、基本假设和存在的意义。\n",
      "\n",
      "接下来，我想到文章中提到的“本体论”部分应该是在解释信息地理学的基本存在形式或其核心内容。也就是说，作者可能从信息地理学的角度出发，讨论了研究对象是地理信息，以及如何通过分析这些信息来理解地理现象。\n",
      "\n",
      "然后，考虑到用户的问题比较直接，他们只需要知道文章中提到的“本体论”指的是什么，而不需要深入探讨哲学中的本体论概念。因此，我应该专注于文章的具体内容，提取出相关信息，并用简洁明了的语言回答。\n",
      "\n",
      "可能的结构是先解释本体论在一般情况下的含义，然后具体到这篇文章中的应用，即信息地理学的研究对象和方法。这样可以帮助用户更好地理解作者的观点。\n",
      "\n",
      "最后，确保回答准确无误，避免误解文章的内容。如果有必要，可以引用原文中的一些关键词或句子来支持解释。\n",
      "</think>\n",
      "\n",
      "在这篇文章中，“本体论”指的是对信息地理学研究对象、基本假设以及存在的意义的探讨。具体来说，作者认为信息地理学的研究对象是地理信息及其背后的地理现象，其本体论层面的核心在于通过分析和理解地理信息的本质与特征，来揭示地理系统的规律和特性。\n",
      "\n",
      "因此，在文章中，“本体论”被用来描述信息地理学对地理学研究对象的重新定义，即从传统的空间、时间和过程等维度，转向以信息为核心的研究视角。这种转变反映了信息革命对地理学的影响，以及地理学在信息时代的新定位。\n"
     ]
    }
   ],
   "source": [
    "query = \"这篇文章中的本体论指的是什么\"\n",
    "response = qa_chain.invoke(query)\n",
    "print(response[\"result\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "6cf50176-b3d2-450c-965a-34b050d9fe41",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Multiple definitions in dictionary at byte 0x2173d for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x218cd for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x21a73 for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x21c24 for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x21df6 for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x21f9c for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x22137 for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x222bc for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x22457 for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x225dc for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x22777 for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x2293e for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x22ade for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x22c73 for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x22e13 for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x22fb3 for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x2313d for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x232d2 for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x2345c for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x235db for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x23786 for key /GSP1\n",
      "Multiple definitions in dictionary at byte 0x23949 for key /GSP1\n"
     ]
    }
   ],
   "source": [
    "# from langchain_text_splitters import CharacterTextSplitter\n",
    "# from langchain_community.document_loaders import PyPDFLoader\n",
    "# file_path = '/home/geobeans/Documents/pdf/基于大模型的具身智能任务规.pdf'\n",
    "# # 初始化pdf 文档加载器\n",
    "# loader = PyPDFLoader(file_path=file_path)\n",
    "# # 将pdf中的文档解析为 langchain 的document对象\n",
    "# documents = loader.load()\n",
    "# # 将文档拆分为合适的大小\n",
    "# text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=100)\n",
    "# docs = text_splitter.split_documents(documents)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "ade8a4f0-9601-488d-9ee1-0d939b008e2e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Note: you may need to restart the kernel to use updated packages.\n"
     ]
    }
   ],
   "source": [
    "pip install --upgrade --quiet  pymilvus"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6e15134a-19da-4c53-8185-31b323f8d4dd",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "py3.12_torch22",
   "language": "python",
   "name": "py3.12_torch22"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
